#include <math.h>
#include "gtkcssshadowvalueprivate.h"
+#include "gtksnapshot.h"
#include <string.h>
*border = b;
}
+
+gboolean
+gtk_css_shadows_value_push_snapshot (const GtkCssValue *value,
+ GtkSnapshot *snapshot)
+{
+ gboolean need_shadow = FALSE;
+ int i;
+
+ for (i = 0; i < value->len; i++)
+ {
+ if (!gtk_css_shadow_value_is_clear (value->values[i]))
+ {
+ need_shadow = TRUE;
+ break;
+ }
+ }
+
+ if (need_shadow)
+ {
+ GskShadow *shadows = g_newa (GskShadow, value->len);
+ gtk_css_shadows_value_get_shadows (value, shadows);
+ gtk_snapshot_push_shadow (snapshot, shadows, value->len, "Shadow<%u>", value->len);
+ }
+
+ return need_shadow;
+}
const GtkCssValue *shadows_value, *transform_value, *filter_value;
graphene_matrix_t transform_matrix;
GtkCssImage *image;
- GskShadow *shadows;
- gsize n_shadows;
+ gboolean has_shadow;
g_return_if_fail (GTK_IS_CSS_STYLE (style));
g_return_if_fail (snapshot != NULL);
gtk_css_filter_value_push_snapshot (filter_value, snapshot);
- n_shadows = gtk_css_shadows_value_get_n_shadows (shadows_value);
- if (n_shadows > 0)
- {
- shadows = g_newa (GskShadow, n_shadows);
- gtk_css_shadows_value_get_shadows (shadows_value, shadows);
- gtk_snapshot_push_shadow (snapshot, shadows, n_shadows, "IconShadow<%zu>", n_shadows);
- }
+ has_shadow = gtk_css_shadows_value_push_snapshot (shadows_value, snapshot);
if (graphene_matrix_is_identity (&transform_matrix))
{
gtk_snapshot_pop (snapshot);
}
- if (n_shadows > 0)
+ if (has_shadow)
gtk_snapshot_pop (snapshot);
-
+
gtk_css_filter_value_pop_snapshot (filter_value, snapshot);
}
graphene_matrix_t transform_matrix;
graphene_rect_t bounds;
double width, height;
- GskShadow *shadows;
- gsize n_shadows;
+ gboolean has_shadow;
g_return_if_fail (GTK_IS_CSS_STYLE (style));
g_return_if_fail (snapshot != NULL);
gtk_css_filter_value_push_snapshot (filter_value, snapshot);
- n_shadows = gtk_css_shadows_value_get_n_shadows (shadows_value);
- if (n_shadows > 0)
- {
- shadows = g_newa (GskShadow, n_shadows);
- gtk_css_shadows_value_get_shadows (shadows_value, shadows);
- gtk_snapshot_push_shadow (snapshot, shadows, n_shadows, "IconShadow<%zu>", n_shadows);
- }
+ has_shadow = gtk_css_shadows_value_push_snapshot (shadows_value, snapshot);
if (color_matrix)
gtk_snapshot_push_color_matrix (snapshot, color_matrix, color_offset, "Recoloring Icon");
if (color_matrix)
gtk_snapshot_pop (snapshot);
- if (n_shadows > 0)
+ if (has_shadow)
gtk_snapshot_pop (snapshot);
-
+
gtk_css_filter_value_pop_snapshot (filter_value, snapshot);
}
{
const GdkRGBA *fg_color;
GtkCssValue *shadows_value;
- GskShadow *shadows;
- gsize n_shadows;
+ gboolean has_shadow;
g_return_if_fail (snapshot != NULL);
g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
fg_color = _gtk_css_rgba_value_get_rgba (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR));
shadows_value = _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_TEXT_SHADOW);
- n_shadows = gtk_css_shadows_value_get_n_shadows (shadows_value);
-
- if (n_shadows > 0)
- {
- shadows = g_newa (GskShadow, n_shadows);
- gtk_css_shadows_value_get_shadows (shadows_value, shadows);
- gtk_snapshot_push_shadow (snapshot, shadows, n_shadows, "TextShadow<%zu>", n_shadows);
- }
+ has_shadow = gtk_css_shadows_value_push_snapshot (shadows_value, snapshot);
gsk_pango_show_layout (snapshot, fg_color, layout);
- if (n_shadows > 0)
+ if (has_shadow)
gtk_snapshot_pop (snapshot);
gtk_snapshot_offset (snapshot, -x, -y);